#include <string.h>
#include <math.h>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
/**
 * @brief 
 */
char telhash[63] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int get_telhash_num(char c )
{
    if( c >='0' && c<='9')
	{
		return c-'0'; 
	}else if( c>='a' && c <='z')
	{
		return c-'a'+10;
	} else if( c>='A' && c <='Z')
	{
		return c-'A'+10+26;
	}else{
		return -1; 
	}

}
string get_mobile_code(string tel)
{
	long num = atol(tel.c_str());
	long  x=num , y  ; 
	string res; 

	for ( long i=0; x ; i++) {
		y=x%62;
		res.push_back(telhash[y]) ; 
		x=x/62;

		cout	<< "mod y = " << y << "\t telhash[y]  = " << telhash[y] << "\t x = " << x << endl;
		
	}
	return res; 
}
string get_code_mobile(string code)
{
	long num =0 ; 
	for ( size_t index=0; index<code.size();index++ ) {
		int r =get_telhash_num(code[index]);   
		if(r < 0)
		{
			printf ( "Error Code %d\n", code[index] );
			return "ERROR";
		}
		num+= r*(long )pow(62, index) ; 
	}
	char buf[16] = {0} ; 
	sprintf(buf, "%ld", num) ; 
	string s ;
	s.append(buf) ; 
	return s ; 
}

void debug()
{
	for ( int index=0; index<(int)strlen(telhash); index++) {
		printf ( "index=[%d]\tresult=[%c]\n" , index, telhash[index]);
	}
}

// 130 1234 5678
// 199 9999 9999
// 568 0023 5584
// 3 5216 1460 6208
void test(string tel){
//	cout	<< tel << endl;
	string s ; 
	s=get_mobile_code(tel) ; 
	cout<<s<<"\t" <<get_code_mobile(s) <<  endl;
//	cout<<get_code_mobile(s)<<endl;

}
int main ( int argc, char *argv[] )
{
	string tel = "13965302033";
	test(tel);
	test("15011427758") ; 
//	test("13000000002") ; 
//	test("13000000003") ; 
//	test("13000000004") ; 
//	test("13000000005") ; 
//	test("13000000006") ; 
//	test("13000000007") ; 
//	test("13000000008") ; 
//	test("13000000009") ; 
//	test("13000000010") ; 
//	test("13000000011") ; 
//	test("13000000012") ; 
//	test("13000000013") ; 
//	test("13000000014") ; 
//	test("13000000015") ; 

	return EXIT_SUCCESS;
}	